<?php

//异步tcp客户端
/**
 * 粘包的问题
 */

$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);

$client->set([
    'open_length_check' => 1,
    'package_length_type' => 'N',
    'package_length_offset' => 0,       //第N个字节是包长度的值
    'package_body_offset' => 4,       //第几个字节开始计算长度
    'package_max_length' => 2000000,  //协议最大长度
]);

//连接服务端
$client->on("connect", function (swoole_client $cli) {
    $data = '固定包头跟包体协议';
//    for ($i = 0; $i < 5; $i++) {
//        $pack = pack('N', strlen($data)) . $data;
//        $cli->send($pack);
//    }
    $pack = pack('N', strlen($data)) . $data;
    $cli->send($pack);

});

//接收到服务端发送的消息时触发的
$client->on('receive', function ($cli, $data) {
    $len = unpack('N', $data)[1];
    echo substr($data, -$len).PHP_EOL;
});


$client->on('error', function ($cli) {
});


//监听连接关闭事件,客服端关闭，或者服务器主动关闭
$client->on('close', function ($cli) {

});


//先绑定事件之后随后建立连接，连接失败直接退出并打印错误码
$client->connect('127.0.0.1', 9501) || exit("connect failed. Error: {$client->errCode}\n");


//echo '我能不能执行';